【问题标题】:MySQL Character Set and CollateMySQL 字符集和整理
【发布时间】:2021-08-04 06:27:14
【问题描述】:

我使用 MySQL 5.7,但我不知道如何配置它以正确显示越南语。

我已经设置了

CREATE DATABASE brt
    DEFAULT CHARACTER SET utf8 COLLATE utf8_vietnamese_ci;

之后我使用“LOAD DATA LOCAL INFILE”将越南人写入的数据加载到数据库中。

但是我经常得到一个越南文字显示错误的结果。

详细代码和文件请通过我的GitHub查看如下链接

https://github.com/fivermori/mysql

请告诉我如何解决这个问题。谢谢。

【问题讨论】:

  • 你必须考虑很多参数。控制台/客户端代码页设置、可能的客户端代码预转换、连接和服务器字符集设置等等......
  • 可能与你的问题无关,但要避免mysql原有残缺的“utf8”字符集,使用“utfmb4”

标签: mysql character mysql-loadfile


【解决方案1】:

正如@ysth 建议的那样,使用utf8mb4 将为您省去未来的麻烦。如果您将创建语句更改为如下所示,那么您应该很好:

CREATE DATABASE `brt` DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
USE `brt`;

DROP TABLE IF EXISTS `fixedAssets`;
CREATE TABLE IF NOT EXISTS `fixedAssets` (
    `id`            int(11)        UNSIGNED NOT NULL    AUTO_INCREMENT,
    `code`          varchar(250)     UNIQUE NOT NULL    DEFAULT '',
    `name`          varchar(250)            NOT NULL    DEFAULT '',
    `type`          varchar(250)            NOT NULL    DEFAULT '',
    `createdDate`   timestamp               NOT NULL    DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE INDEX `idx_fa_main` ON `fixedAssets` (`code`);

我已经使用您提供的数据对此进行了测试,并获得了预期的查询结果:

name
----------------------------------------------------------------
Mould Terminal box cover BN90/112 612536030 39 tháng
Mould W2206-045-9911-VN #3 ( 43 tháng)
Mould Flange BN90/B5 614260271 ( 43 tháng)
Mould 151*1237PH04pC11 ( 10 năm)
Transfer 24221 - 2112 ( sửa chữa nhà xưởng Space T 07-2016 ) BR2

使用utf8mb4 字符集和utf8mb4_unicode_ci 排序规则通常是确保您的数据库能够正确显示从纯ASCII 到现代表情符号以及介于两者之间的所有内容的更简单方法之一。

【讨论】:

  • 感谢您提出使用不同字符集的建议,但我发现此错误的主要原因可能来自 csv 文件。我已经将它们转换成JSON文件,越南语句子显示正确。
猜你喜欢
  • 1970-01-01
  • 2011-02-26
  • 1970-01-01
  • 2012-10-26
  • 2016-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-15
相关资源
最近更新 更多