【发布时间】:2011-07-14 08:31:35
【问题描述】:
我正在尝试使用 PHP 和 MySQL 构建购物车。 我在 MySQL 中的 db 是 utf8,我在 db 中的表是 utf8,
如何使用希伯来语字符?
【问题讨论】:
我正在尝试使用 PHP 和 MySQL 构建购物车。 我在 MySQL 中的 db 是 utf8,我在 db 中的表是 utf8,
如何使用希伯来语字符?
【问题讨论】:
问号出现在哪里?这可能是数据库以外的某个地方的编码问题。
【讨论】:
如果是编码问题(听起来确实如此),此查询会有所帮助:
SET NAMES utf8
在连接后和移动任何数据之前立即执行此查询(例如mysql_query("SET NAMES utf8"))。
【讨论】:
我可以通过以下方式解决这个问题:
utf8_general_ci
utf8_general_ci
header('Content-Type: text/html; charset=utf-8');
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
mysql_query("SET NAMES 'utf8'");
【讨论】:
mysql_query("SET NAMES 'utf8'"); 将按原样输入。
您可以像这样在代码中使用 PDO:
$db = new PDO($config['DSN'], $config['dbUserName'], $config['dbPassword']);
$db->exec("SET NAMES 'utf8'");
确保在 'utf8' 周围包含单引号。
【讨论】:
经过大量工作,我找到了一个始终有效的解决方案..: 没有 SET_NAMES。
在conn.inc.php 文件中,选择数据库并连接到它后,执行以下操作:
if(!mysqli_set_charset($conn, 'utf8')) {
echo 'the connection is not in utf8';
exit();
}
...并且在 html 中始终使用字符集 utf-8;
这为我解决了这个问题。不需要使用set_names(),这没关系,但它让我很恼火。
【讨论】:
要在数据库列中存储非 ASCII 字符,您需要使用特定字符集定义该列。您可以在 3 个级别指定字符集:数据库、表和列。例如:
CREATE DATABASE db_name CHARACTER SET utf8
CREATE TABLE tbl_name (...) CHARACTER SET utf8
CREATE TABLE tbl_name (col_name CHAR(80) CHARACTER SET utf8, ...)
http://www.herongyang.com/PHP/Non-ASCII-MySQL-Store-Non-ASCII-Character-in-Database.html
【讨论】:
mysql_query('SET NAMES utf8') ..... 把这个放到 PHP 里
【讨论】:
$conn->set_charset("utf8");将其用于您的 dbconnect
【讨论】:
在我的例子中,我从转储中创建了数据库,这个命令解决了它:
ALTER DATABASE <database_name> CHARACTER SET utf8 COLLATE utf8_unicode_ci;
【讨论】: