【问题标题】:MySQL character set for multiple European languages + mathematic symbols多种欧洲语言的 MySQL 字符集 + 数学符号
【发布时间】:2014-10-18 12:20:48
【问题描述】:

我需要一些帮助来获取一个 MySQL 表来存储和输出以下语言的字符:

  • 英文
  • 法语
  • 俄语
  • 土耳其语
  • 德语

这些是我在数据中所知道的语言。它还使用如下数学符号:

b ∈ A. 为每个 A ⊆ 定义 s(A):= supn≥0 r A (n) ? ∪ {0}。

我正在使用 htmlentities 对文本进行编码。上面的 ? 旨在显示为 。 当我查看 PhpMyAdmin 中的数据时,它会以这种方式显示。其他字符按预期编码。

表格设置为 utf8_unicode_ci,网站的所有方面都设置为 UTF-8(包括通过 .htaccess 文件、PHP 标头和元标记)。

请帮忙?

附加信息:

托管环境:

Linux, Apache
Mysql 5.5.38 
PHP Version 5.4.4-14

连接字符串:

ini_set('default_charset', 'UTF-8');
$mysqli = new mysqli($DB_host , $DB_username, $DB_password);
$mysqli->set_charset("utf8");
$mysqli->select_db($DB_name);

显示创建表 mydatabase.mytable 输出:

CREATE TABLE `tablename` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `created` datetime NOT NULL,
 `updated` datetime NOT NULL,
 `product` int(11) NOT NULL,
 `ppub` tinytext COLLATE utf8_unicode_ci NOT NULL,
 `pubdate` date NOT NULL,
 `numerous_other_tinytext_cols` tinytext COLLATE utf8_unicode_ci NOT NULL,
 `numerous_other_tinytext_cols` tinytext COLLATE utf8_unicode_ci NOT NULL,
 `text` text COLLATE utf8_unicode_ci NOT NULL,
 `keywords` tinytext COLLATE utf8_unicode_ci NOT NULL,
 `active` int(11) NOT NULL DEFAULT '1',
 `orderid` int(11) NOT NULL,
 `src` tinytext CHARACTER SET latin1 NOT NULL,
 `views` int(11) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=17780 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

从 information_schema.SCHEMATA 输出中选择 DEFAULT_CHARACTER_SET_NAME:

DEFAULT_CHARACTER_SET_NAME
utf8 [->UTF-8 Unicode]
utf8mb4 [->UTF-8 Unicode]

使用的字体:

Arial

数据库中的文本示例:

Let <em>A</em> be a subset of the set of nonnegative integers ℕ ∪ {0}, and let <em>r</em><sub><em>A</em></sub> (<em>n</em>) be the number of representations of <em>n</em> ≥ 0 by the sum <em>a</em> + <em>b</em> with <em>a, b</em> ∈ <em>A</em>. 

网页输出:

Let <em>A</em> be a subset of the set of nonnegative integers ? ∪ {0}, and let <em>r</em><sub><em>A</em></sub> (<em>n</em>) be the number of representations of <em>n</em> ≥ 0 by the sum <em>a</em> + <em>b</em> with <em>a, b</em> ∈ <em>A</em>.

变成了

令 A 是非负整数集合的子集 ? ∪ {0},令 rA (n) 为 a + b 与 a 之和,b ∈ A 的 n ≥ 0 的表示数。

【问题讨论】:

  • 数据库的连接字符串是什么? SHOW CREATE TABLE mydatabase.mytableSELECT DEFAULT_CHARACTER_SET_NAME FROM information_schema.SCHEMATA 说什么?您使用什么字体、浏览器和操作系统?最后,当您通过 DB 客户端查看数据库中的数据时,它的外观如何?
  • 嗨,卡罗尔,我在上面添加了一些信息。到目前为止检查的浏览器包括 Firefox、IE 11 和 Chrome。所有输出方式相同。
  • 有趣的是,我注意到在我的手机上查看此主题时,ℕ 字符不会显示在此页面上。

标签: mysql character-encoding character collation


【解决方案1】:

虽然您的数据库和表配置为使用 UTF-8,但您的列之一仍然不是:

CREATE TABLE `tablename` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `created` datetime NOT NULL,
 `updated` datetime NOT NULL,
 `product` int(11) NOT NULL,
 `ppub` tinytext COLLATE utf8_unicode_ci NOT NULL,
 `pubdate` date NOT NULL,
 `numerous_other_tinytext_cols` tinytext COLLATE utf8_unicode_ci NOT NULL,
 `numerous_other_tinytext_cols` tinytext COLLATE utf8_unicode_ci NOT NULL,
 `text` text COLLATE utf8_unicode_ci NOT NULL,
 `keywords` tinytext COLLATE utf8_unicode_ci NOT NULL,
 `active` int(11) NOT NULL DEFAULT '1',
 `orderid` int(11) NOT NULL,
 `src` tinytext CHARACTER SET latin1 NOT NULL,  <--------- This one
 `views` int(11) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=17780 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

由于所有其他符号都经过 HTML 编码,它们将在所有字符集中保留,但 不存在,它没有命名实体引用。

您需要转换您的列:

ALTER TABLE tablename MODIFY src TINYTEXT CHARACTER SET utf8;

注意:我注意到你喜欢数学符号。其中一些在基本多语言平面之外,即。代码点 > 0xFFFF,例如 mathematical letter variants (fraktur, double-struck, semantic italic etc.)

如果你想支持它们,你需要将 MySQL 中的所有编码(表、列、连接)切换为utf8mb4,这才是真正的 UTF-8(utf8 在 MySQL 中表示 UTF-8 的子集仅使用 BMP),使用 utf8mb4_unicode_ci 排序规则。 Here is how to do the migration.


另外,我注意到您正在对 HTML 进行 HTML 编码。也许你有一个理由,但我认为存储它没有意义:

&lt;em&gt;A&lt;/em&gt;

如果要将其放入 HTML 文档中,现在您需要对其进行 HTML 解码至少一次,有时甚至两次。我宁愿存储几乎其他人所做的事情:

<em>A</em>

这样,您将以最佳方式本地存储 Unicode 字符。

【讨论】:

  • 谢谢你解决了这个问题!
  • 谢谢,这是唯一对我有用的解决方案。
猜你喜欢
  • 2020-05-27
  • 1970-01-01
  • 2011-09-20
  • 1970-01-01
  • 2012-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-09
相关资源
最近更新 更多