This topic specifically talks about UTF-8 and considerations for using it with a database. If you want more information about using databases in PHP then checkout this topic.
Storing Data in a MySQL Database:
utf8mb4
character set on all tables and text columns in your database. This makes MySQL physically store and retrieve values encoded natively in UTF-8.MySQL will implicitly use utf8mb4 encoding if a utf8mb4_* collation is specified (without any explicit character set).
utf8mb4
so you’ll be forced to use utf8
, which only supports a subset of Unicode characters.Accessing Data in a MySQL Database:
utf8mb4
. This way, MySQL does no conversion from its native UTF-8 when it hands data off to your application and vice versa.For Example (The same consideration regarding utf8mb4
/utf8
applies as above):
- If you're using the [PDO][1] abstraction layer with PHP ≥ 5.3.6, you can specify `charset` in the [DSN][2]:
$handle = new PDO('mysql:charset=utf8mb4');
- If you're using [mysqli][3], you can call [`set_charset()`][4]:
$conn = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');
$conn->set_charset('utf8mb4'); // object oriented style
mysqli_set_charset($conn, 'utf8mb4'); // procedural style
- If you're stuck with plain [mysql][5] but happen to be running PHP ≥ 5.2.3, you can call [`mysql_set_charset`][6].
$conn = mysql_connect('localhost', 'my_user', 'my_password');
$conn->set_charset('utf8mb4'); // object oriented style
mysql_set_charset($conn, 'utf8mb4'); // procedural style
- If the database driver does not provide its own mechanism for setting the connection character set, you may have to issue a query to tell MySQL how your application expects data on the connection to be encoded: [`SET NAMES 'utf8mb4'`][7].