我正在尝试为字典制作数据。
但是当系统保存转录到DB时,它会丢失一些特殊字符。
前:
group /ɡruːp/
将其保存在数据库中时,它只保留group /ɡrup/
它失去了:
个字符。
哪个字符集可以保存此值?
我尝试使用UTF8
,UTF8-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();
感谢。
答案 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。