我将我的php应用程序移至新服务器。我使用mysql5分贝。当我更新或插入某些数据库时,每个"
和-
标志更改为?
。我使用SET NAMES UTF8
和SET CHARACTER SET
,但它不起作用。有任何想法吗?mysql和编码
mysql和编码
回答
我的猜测是,你从它转化成"
有角度的漂亮报价有些文本编辑器粘贴,并且将您的-
成MDASH,这是造成两者被表示为?
。
虽然您将数据库设置为接受UTF8字符,但您可能未设置Web服务器/ PHP以接受这些字符。尝试玩mbstring
函数,但请检查以确保您未使用倾斜的引号或破折号。
SET NAMES UTF8
应该在每个页面上使用,当选择以及更新或插入时。
实际上,每次连接到数据库时都必须使用此查询。只需添加它即可连接代码。
它是everywere,我有我的db_connect.php文件,我包括无处不在。 – qqryq 2010-05-13 11:31:30
您需要UTF-8全部贯通,使智能引号和破折号的方式(“” - )其他非ASCII字符和可靠地工作:
(1)确保浏览器会将您编码成UTF字符-8。通过声明,包括形式为UTF-8的页面操作:
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
...
(忽略<form accept-encoding>
,这并不在IE右键工作)
(2)与原始字节PHP交易和不关心他们在编码什么,但数据库确实在意,所以你必须告诉它什么编码来自PHP的字节进来。这就是SET NAMES
正在做什么,但mysql_set_charset可能更可取。
(3)一旦正确的字符到达数据库,它将需要将它们存储在Unicode编码中以确保所有字符都适合。每列可以有不同的编码,但当您使用UTF-8编码时,您可以使用DEFAULT CHARACTER SET utf8
来使CREATE table
中的所有文本列都可用。如果您愿意,也可以将数据库或整个服务器的默认字符集设置为utf8
。
如果您已经有CREATE
d表并且它们是非UTF-8归类,则必须重新创建表或alter表。您可以使用SHOW FULL COLUMNS FROM sometable;
来检查当前的排序规则。 (4)请确保您使用htmlspecialchars()
而不是htmlentities()
来自PHP输出的HTML编码文本,默认情况下会混淆非ASCII字符。 [作为(2)和(3)的替代方法,只需使用连接和表存储的默认Latin-1编码,但仍然可以将UTF-8字节放入其中。这种方法的缺点是,看着数据库的其他工具看起来不对,而小写/大写字符不会以预期的不区分大小写的方式相互比较。]
- 1. PHP和MySQL编码
- 2. MYSQL命令和编码
- 3. 改变编码,rails和mysql
- 4. Django和MySql - 编码困难
- 5. MySQL编码utf8_general_ci
- 6. mysql php编码
- 7. 编码问题wirh JDBC和MySQL
- 8. PDO + MySQL和破碎UTF-8编码
- 9. UTF-16编码弹簧MVC和MySQL
- 10. Rails,Redmine,Mysql和SQL Server编码问题
- 11. Django和MySQL utf8编码问题
- 12. python和mysql之间的编码问题
- 13. MySQL编码问题
- 14. MySQL编码问题
- 15. Mysql编码问题
- 16. Mysql函数编码
- 17. 解密MySQL编码
- 18. URI编码和HTML编码
- 19. ASCII编码和UNICODE编码
- 20. FPDF/mySQL:如何用fpdf和mysql解决编码问题
- 21. mysql的编码问题
- 22. MySQL到PostrgreSQL编码问题
- 23. 问题与MySQL编码
- 24. 字符集编码PHP/MySQL
- 25. MySQL的字符编码(OA)
- 26. 错误编码 - PhpMyAdmin/MySql
- 27. Latin1_swedish_ci MySQL中的编码
- 28. 在MySQL中的Varchar编码
- 29. PHP/MySQL/JSON编码帮助
- 30. PHP MySQL utf 8编码
还有其他方法去做这个?我无法安装任何额外的软件包到我的PHP发行版,似乎没有安装mbstring – qqryq 2010-05-13 01:13:01
我不确定。你可以尝试运行一个HTML编码来转换引号......但这可能不是最好的解决方法。 – 2010-05-13 01:14:59