无法保存转录到Mysql

时间:2016-03-23 04:00:13

标签: php mysql

我正在尝试为字典制作数据。

但是当系统保存转录到DB时,它会丢失一些特殊字符。

前:

group /ɡruːp/

将其保存在数据库中时,它只保留group /ɡrup/

它失去了:个字符。

哪个字符集可以保存此值?

我尝试使用UTF8UTF8-MB4

这是我的PHP代码:

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
$conn->set_charset("UTF-16LE");

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$stmt = $conn->prepare("INSERT INTO words (WORD,WORD_UPPER_CASE, TRANSCRIBE, DESCRIPTION)VALUES (?, ?, ?,?)");
$stmt->bind_param("ssss", $_WORD,$_WORD_UPPER_CASE, $_TRANSCRIBE, $_DESCRIPTION);

// set parameters and execute
$_WORD = $WORD;
$_WORD_UPPER_CASE = $WORD_UPPER_CASE;
$_TRANSCRIBE = $TRANSCRIBE;
$_DESCRIPTION = $DESCRIPTION;

$stmt->execute();   
$stmt->close();
$conn->close();

感谢。

1 个答案:

答案 0 :(得分:1)

您的代码假定声明编码不会出错:

$conn->set_charset("UTF-16LE");

如果您运行var_dump($conn->set_charset("UTF-16LE")),则会看到bool(false),因为它不是MySQL中的有效编码名称。

在功能文档的See Also部分,您可以找到List of character sets that MySQL supports链接。在我的系统中,UTF编码包括:

mysql> SHOW CHARACTER SET LIKE '%utf%';
+---------+----------------+--------------------+--------+
| Charset | Description    | Default collation  | Maxlen |
+---------+----------------+--------------------+--------+
| utf8    | UTF-8 Unicode  | utf8_general_ci    |      3 |
| utf8mb4 | UTF-8 Unicode  | utf8mb4_general_ci |      4 |
| utf16   | UTF-16 Unicode | utf16_general_ci   |      4 |
| utf32   | UTF-32 Unicode | utf32_general_ci   |      4 |
+---------+----------------+--------------------+--------+
4 rows in set (0.00 sec)

最后但同样重要的是,你不应该尝试随机编码。您的应用程序字符集是决定的。在2016年,没有理由不使用UTF-8。