字符存储为数据库中的奇怪字符,但在HTML中正确呈现

时间:2014-01-24 04:19:43

标签: php html mysql utf-8 collation

我正在尝试将字符串“ಕನ್ನಡ”存储到mySQL数据库中。 它被存储为“ಕನà³à²¨à²” 但它在html上正确呈现为“ಕನ್ನಡ”。 是否可以在数据库中将其存储为“ಕನ್ನಡ”而不是“ಕನà³à²¨à²”?如是。怎么样?如果您需要有关整理的更多信息,请询问。

存储字符串的列的字符集是'utf8_unicode_ci'

2 个答案:

答案 0 :(得分:1)

您可以检索它们并正确显示它们意味着它们被正确存储。

我猜你用来验证数据的其他tool会错误地显示数据。

这可能是PhpMYAdmin连接设置中的问题。它也必须明确设置为UTF-8。请参阅How to display UTF-8 characters in phpMyAdmin?

中接受的答案

答案 1 :(得分:0)

有关如何将默认字符集和排序规则设置为utf,请在my.cnf中添加以下行描述部分并重新启动MySQL服务。

[client]
default-character-set   = utf8

[mysql]
default-character-set   = utf8

[mysqld]
character-set-server    =       utf8
collation-server        =       utf8_general_ci
init-connect            =       'SET NAMES utf8'

请记住已经存在的数据库& table不会更改charset和collat​​ion,并且在现有数据库中创建的表将具有该数据库的charset。

但是新创建的数据库和表将具有默认字符集和utf的整理。

示例:

mysql> create database demo1;
Query OK, 1 row affected (0.00 sec)

mysql> show create database demo1 \G
*************************** 1. row ***************************
       Database: demo1
Create Database: CREATE DATABASE `demo1` /*!40100 DEFAULT CHARACTER SET utf8 */
1 row in set (0.00 sec)

mysql> use demo1 
Database changed

mysql> create table test_char(data_to_insert CHAR(50)) ;
Query OK, 0 rows affected (0.26 sec)

mysql> show create table test_char\G
*************************** 1. row ***************************
       Table: test_char
Create Table: CREATE TABLE `test_char` (
  `data_to_insert` char(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql> INSERT INTO test_char VALUES('ಕನ್ನಡ');
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM test_char;
+-----------------+
| data_to_insert  |
+-----------------+
| ಕನ್ನಡ            |
+-----------------+
1 row in set (0.00 sec)