php+mysql乱码问题
问题描述:
从php界面insert数据到mysql,只能输入偶数个汉字不能输入奇数个汉字,输入奇数个汉字后报“Data too long for column ”错误,并没有更改数据库数据。到数据库查看,发现汉字都是乱码。但是php界面显示汉字正常(当然显示的都是偶数个汉字,奇数个汉字都没有写入数据库)。
解决思路:
1.更改my.ini文件,把sql-mode=”STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”改成sql-mode=”NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”(就是去掉STRICT_TRANS_TABLES)。重启mysql。
这样做的结果是,不会报“Data too long for column ”,于是奇数个汉字就能存入数据库。但是php界面显示奇数个汉字的地方出错,根据错误可以发现是汉字解析时把部分代码误认一并解析了,所以php界面显示不正常。这说明是汉字转换的错误(对于汉字UTF8则需要3 Bytes而ANSI/Unicode/UCS2编码都只用2 Bytes,此时输入汉字的个数为2个时数据库里的乱码是3个,说明1个乱码是2 Bytes,解析到界面时没有缺失所以可以正常显示;而输入汉字的个数为1个时数据库里的乱码是1个,说明变乱码时失去了1 Byte,解析到界面时有缺失所以不能正常显示)。
2.写一个关于insert或update奇数个汉字的test.sql文件存成utf8放在C盘。在mysql里执行source c:/test.sql;
结果发现仍然是乱码。所以确定mysql的character设置有问题。
3.学习修改mysql的character设置。
MySQL 4.1以上版本的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。我们最终的目标是使得这四个层次转化会支持中文的编码。
命令一:mysql> SHOW VARIABLES LIKE ''character_set_%'';
查看系统的字符集,结果如下
+--------------------------+---------------------------------------------------------+
| Variable_name | Value &
相关文档:
首先介绍一下此函数的用法:
定义和用法(php5)
microtime() 函数返回当前 Unix 时间戳和微秒数。返回的字符串的格式:msec sec
语法
microtime(get_as_float)
参数 描述
get_as_float 如果给出了 get_as_float 参数并且其值等价于 TRUE,该函数将返回一个浮点数。
说明
本函数仅在支持 gettimeofday() 系统调 ......
<?php
//调试输出信息
$pageCount=15;
for($i=1;$i<=$pageCount;$i++){
dump(GetPageRange($i,$pageCount),$i);
}
//$currentPage 当前页码
//$pageCount 总页数
//$leftSize 左侧页码范围
//$rightSize 右侧页码范围
//返回页码区间数组
function GetPageRange($currentPage,$pageCount,$leftSize=3, ......
PHP是脚本语言,边解析边执行。
<?php
define("COPYRIGHT", "Copyright © 2000, netleader.126.com");
echo COPYRIGHT;
?>
结果:
Copyright & ......
./home/a.php
./b.php
b.php
<?php
setcookie('name[1]',"aaa");
setcookie('name[2]',"bbb");
setcookie('name[3]',"ccc");
?>
在a.php 中
&nb ......
* 摘要:CentOS LAMP作为服务器,不安装不需要的组件,所以在选择组件的时候,不要选web服务器,因为我们后面要手动编译安装。CentOS LAMP系统约定RPM包和源码包存放位置
* 标签:CentOS LAMP
*
Oracle帮您准确洞察各个物流 ......