diff --git a/lib/ddl/tests/ddl_test.php b/lib/ddl/tests/ddl_test.php index e18732b9ddb..ddb754a2d63 100644 --- a/lib/ddl/tests/ddl_test.php +++ b/lib/ddl/tests/ddl_test.php @@ -581,7 +581,7 @@ class core_ddl_testcase extends database_driver_testcase { $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null); $table->add_field('name', XMLDB_TYPE_CHAR, '30', null, null, null, null); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); - for ($i = 0; $i < 15; $i++) { + for ($i = 0; $i < 12; $i++) { $table->add_field('text'.$i, XMLDB_TYPE_CHAR, '1333', null, null, null, null); $data->{'text'.$i} = $text; } diff --git a/lib/dml/tests/dml_test.php b/lib/dml/tests/dml_test.php index 7df8222af03..9fa5c757c68 100644 --- a/lib/dml/tests/dml_test.php +++ b/lib/dml/tests/dml_test.php @@ -5494,6 +5494,42 @@ class core_dml_testcase extends database_driver_testcase { $dbman->drop_table($table); } } + + /** + * Test that the database has full utf8 support (4 bytes). + */ + public function test_four_byte_character_insertion() { + $DB = $this->tdb; + + if ($DB->get_dbfamily() === 'mysql' && strpos($DB->get_dbcollation(), 'utf8_') === 0) { + $this->markTestSkipped($DB->get_name() . + ' does not support 4 byte characters with only a utf8 collation. + Please change to utf8mb4 for full utf8 support.'); + } + + $dbman = $this->tdb->get_manager(); + + $table = $this->get_test_table(); + $tablename = $table->getName(); + + $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null); + $table->add_field('name', XMLDB_TYPE_CHAR, '255', null, null, null, null); + $table->add_field('content', XMLDB_TYPE_TEXT, 'big', null, XMLDB_NOTNULL); + $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); + $dbman->create_table($table); + + $data = array( + 'name' => 'Name with a four byte character 𠮟る', + 'content' => 'Content with a four byte emoji 📝 memo.' + ); + + $insertid = $DB->insert_record($tablename, $data); + $result = $DB->get_record($tablename, array('id' => $insertid)); + $this->assertEquals($data['name'], $result->name); + $this->assertEquals($data['content'], $result->content); + + $dbman->drop_table($table); + } } /**