我有一个类似的mysql表结构
CREATE TABLE `table_contenu` (
`id_contenu` int(10) UNSIGNED NOT NULL,
`id_rubrique` int(10) UNSIGNED NOT NULL,
`id_membre` varchar(250) NOT NULL,
`id_contenu_type` int(10) UNSIGNED NOT NULL,
`titre_fr` varchar(128) NOT NULL,
`titre_en` varchar(128) NOT NULL,
`resume_fr` text NOT NULL,
`resume_en` text NOT NULL,
`texte_fr` text NOT NULL,
`texte_en` text NOT NULL,
`date_start` date NOT NULL,
`date_end` date NOT NULL,
`calendrier` varchar(5) NOT NULL DEFAULT 'false',
`une` varchar(5) NOT NULL DEFAULT 'false',
`ordre` smallint(5) UNSIGNED NOT NULL,
`flag` varchar(5) NOT NULL DEFAULT 'true',
`date_maj` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
在我的网站上,我有一个提交数据的表格
我页面上的字符集是<meta charset="utf-8">
"texte_fr"具有配置utf8_general_ci(我尝试过使用utf8_unicode_ci,但它是相同的!)
为什么当我提交单词"séances"时,这个单词在数据库中看起来是"séances?"?
谢谢你的帮助。。。
重要的是,整个行代码具有相同的字符集,以避免出现字符显示错误的问题。
下面列出了一些必须设置为特定字符集的内容。
标头
- 将HTML和PHP标头中的字符集设置为UTF-8
- PHP:
header('Content-Type: text/html; charset=utf-8');
(PHP头必须放在任何类型的输出(echo、空白、HTML)之前)
- PHP:
连接
- 您还需要在连接本身中指定字符集。
- PDO(在对象本身中指定):
$handler = new PDO('mysql:host=localhost;dbname=database;charset=utf8', 'username', 'password', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET UTF8"));
- MySQLi:(直接放置在创建连接后)
*对于OOP:$mysqli->set_charset("utf8");
*对于程序:mysqli_set_charset($mysqli, "utf8");
(其中$mysqli
是MySQLi连接) - MySQL(已降级,应转换为PDO或MySQLi):(在创建连接后直接放置)
mysql_set_charset("utf8");
- PDO(在对象本身中指定):
数据库
-
您的数据库及其所有表都必须设置为UTF-8。请注意,字符集是,而不是与排序规则相同。
您可以为每个数据库和表运行下面的查询一次(例如在phpMyAdmin中)
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
文件编码
- 同样重要的是,
.php
文件本身是UTF-8编码的。如果您使用Notepad++编写代码,可以在任务栏上的"格式"下拉列表中完成。您应该使用字符集UTF-8 w/o BOM
您也可以看看这篇StackOverflow文章:UTF-8。