mysql装在centos下。修改my.conf,字符集设置为utf8
自己写了个php扩展模块,扩展模块封装了对mysql的操作。比如插入表的操作,可以直接调用一个函数 AddNewDep,这个函数的参数是一个字符串。扩展模块的实现无非是调用sql语句。INSERT INTO table (name,idaddress) VALUES ('%s',1);", name );
其中name是php传过来的值,在扩展模块的程序中name的类型是char*,sql语句也是char*.
这时候如果在扩展模块中打印传入的值,是一堆乱码。
php的页面设置为utf8,在php中调用此模块提供的函数插入值后,该字段是utf8格式的.
这么做了以后,插入到数据库中的中文,是utf-8的,再通过php取数据库中的值,显示也正常。
虽然一切正常,但总觉得奇怪。因为在sql语句中,夹杂了utf-8的数据。sql语句本身是ansi格式。
来解惑,不知道我说清楚没。
自己写了个php扩展模块,扩展模块封装了对mysql的操作。比如插入表的操作,可以直接调用一个函数 AddNewDep,这个函数的参数是一个字符串。扩展模块的实现无非是调用sql语句。INSERT INTO table (name,idaddress) VALUES ('%s',1);", name );
其中name是php传过来的值,在扩展模块的程序中name的类型是char*,sql语句也是char*.
这时候如果在扩展模块中打印传入的值,是一堆乱码。
php的页面设置为utf8,在php中调用此模块提供的函数插入值后,该字段是utf8格式的.
这么做了以后,插入到数据库中的中文,是utf-8的,再通过php取数据库中的值,显示也正常。
虽然一切正常,但总觉得奇怪。因为在sql语句中,夹杂了utf-8的数据。sql语句本身是ansi格式。
来解惑,不知道我说清楚没。
解决方案 »
- in 与exists????
- Lost connection to MySQL server at 'reading initial communication packet', syste
- MySQL5.1.4 强制使用所用报错!
- php如何获取存储过程中的out参数变量
- 在php里, 能调用储存函数, 但不调用储存过程, 有些什么原因?
- ?-?-????如何用ODBC建立odbc数据源?
- 从winxp客户端访问LInux下的MYSQL问题
- 100分求助:谁见过如下mysql出错信息?如何解决?
- centos mysql出错导致服务器关闭
- MySql ifnull 语句问题
- 关于mysql网络数据库的问题
- 在一般情况下,查询速度是不是和数据库占用的磁盘空间成正比的?
mysql_query("SET NAMES UTF8");
http://bbs.csdn.net/topics/390416063
http://bbs.csdn.net/topics/390292319
应该是不用 mysql_query("SET NAMES UTF8"); 'character_set_client', 'utf8'
'character_set_connection', 'utf8'
'character_set_database', 'utf8'
'character_set_filesystem', 'binary'
'character_set_results', 'utf8'
'character_set_server', 'utf8'
'character_set_system', 'utf8'
'character_sets_dir', '/usr/share/mysql/charsets/'我奇怪的地方就在这。php扩展里确实是用的char。我的code
OpenDatabase,ExecuteSql,FreeRES都是自己写的函数。
分别调用的 mysql_real_connect,mysql_query,mysql_free_result
char strSql[256] ={0}; do
{
if ( zend_parse_parameters( ZEND_NUM_ARGS() TSRMLS_CC,
"s", &name, &length ) == FAILURE )
{
break;
} nRet = OpenDatabase();
if( nRet != WU_SUCCESS ) break; sprintf( strSql, "INSERT INTO table_department (department_name,department_address,department_parent_id) VALUES ('%s',1,1);", name );
//php_printf(strSql);
nRet = ExecuteSql( g_hDB, &resDB, strSql );
if( nRet != 0 ) break; FreeRES( &resDB );
我自己做的扩展,分别封装了sqlite和mysql。这样针对不同数据库有统一的调用方法。
sqlite的code和这个接近。中文字符从php传进来,sql语句用的 char, 没有乱码。但是也不放心,总感觉应该会有乱码。
http://www.google.com.hk/#newwindow=1&safe=strict&q=php+debugger&oq=php+debugger&fp=1