【问题标题】:Insert Greek Character to a MySQL table column without using PHP在不使用 PHP 的情况下将希腊字符插入 MySQL 表列
【发布时间】:2019-05-29 16:45:37
【问题描述】:

我们有一个如下的 MySQL 表:

CREATE TABLE Test
(
ID INT(11),
Value VARCHAR(100)
);

我想使用 INSERT 查询并将希腊数据加载到 Value 列中。我想重申,我不希望 PHP 或任何第三方供应商工具参与其中。

我已经尝试过如下 INSERT 查询。查询被执行。当您对我们看到的表执行 SELECT 时?????标记而不是数据。

另外,我也尝试过更改字符集,但没有帮助。

注意:这个问题似乎出现在 MySQL 5.5 版中,而在 v8.0 中我们看到的是希腊数据

INSERT INTO TEST VALUES (1,'ΜΑΣΟΥΤΗΣ Δ. Α.Ε');

SELECT * FROM TEST;

预期的结果是看到希腊数据进入表格,但实际上我们看到了?????。

【问题讨论】:

  • 我们如何在 MySQL 5.5 版中看到相同的行为
  • Workbench 直接应该已经支持希腊和 UTF-8 字符。 In this 5.7 demo没问题。
  • 这是字符集和排序规则的问题。您可能需要 utf8mb4_general_ci 排序规则。 SHOW CREATE TABLE Test; 将揭示这一点。您的Value 列的排序规则是什么?您正在使用某种 mysql 客户端软件,即使它是命令行客户端。你是这样运行的吗? mysql --default-character-set=utf8mb4 ?请edit您的问题提供这些重要细节。

标签: mysql character-encoding


【解决方案1】:

对于任何使用默认值的表,5.5 默认为CHARACTER SET latin1

8.0 的默认值为CHARACTER SET utf8mb4

要使 5.5 正常工作,请在表定义中指定字符集。对于希腊语,utf8utf8mb4 都可以。

Trouble with UTF-8 characters; what I see is not what I stored中的“问号”

注意:在 5.5 或 5.6 中,如果索引 VARCHAR(255) CHARACTER SET utf8mb4 的列,则会出现错误。这可以通过多种方式解决。

http://mysql.rjweb.org/doc.php/limits#767_limit_in_innodb_indexes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    相关资源
    最近更新 更多