#33123 [Asn->Sus]: mysql_field_len() not working with utf-8
| From: | georg@php.net | Date: | Wed, 25 May 2005 14:55:13 +0000 |
| Subject: | #33123 [Asn->Sus]: mysql_field_len() not working with utf-8 | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-79487@lists.php.net to get a copy of this message | ||
ID: 33123
Updated by: georg@php.net
Reported By: rober_box at mailforce dot net
-Status: Assigned
+Status: Suspended
Bug Type: MySQL related
Operating System: Gentoo Linux 2005.0
PHP Version: 4.3.11
Assigned To: georg
New Comment:
Currently MySQL client library doesn't provide an API call to retrieve
CHARSET_INFO structure for a specific character set.
So on client side there is currently no way to determine the maximum
size in bytes and characters.
This will probably be added into MySQL 5.1
Previous Comments:
------------------------------------------------------------------------
[2005-05-24 14:02:10] tony2001@php.net
Doesn't look like a PHP problem to me.
Georg, please confirm it.
------------------------------------------------------------------------
[2005-05-24 12:39:05] rober_box at mailforce dot net
Description:
------------
mysql_field_len() doesn't return the correct field len for
utf-8 fields. Instead it returns the maximum length mysql
allows (i.e 3 bytes). That way i can't check user input
for length sanity.
My configuration:
'./configure' '--prefix=/usr' '--host=i686-pc-linux-gnu'
'--mandir=/usr/share/man' '--infodir=/usr/share/info'
'--datadir=/usr/share' '--sysconfdir=/etc'
'--localstatedir=/var/lib' '--with-apxs2=/usr/sbin/apxs2'
'--without-db3' '--without-db4' '--without-db2'
'--without-ndbm' '--with-mcrypt=/usr' '--with-mhash=/usr'
'--without-interbase' '--without-ming' '--without-swf'
'--without-sybase' '--with-gdbm=/usr' '--without-fdftk'
'--without-java' '--without-mcal' '--without-unixODBC'
'--without-pgsql' '--without-snmp'
'--with-xpm-dir=/usr/X11R6' '--without-gmp'
'--without-mssql' '--with-pdflib=/usr' '--with-gd'
'--enable-gd-native-ttf' '--with-png=/usr'
'--with-png-dir=/usr' '--with-jpeg=/usr'
'--with-jpeg-dir=/usr' '--enable-exif' '--with-tiff=/usr'
'--with-tiff-dir=/usr' '--with-mysql=/usr'
'--with-mysql-sock=/var/run/mysqld/mysqld.sock'
'--with-freetype-dir=/usr' '--with-ttf=/usr'
'--with-t1lib=/usr' '--with-gettext'
'--with-qtdom=/usr/qt/3' '--with-pspell=/usr'
'--with-openssl=/usr' '--without-imap' '--without-ldap'
'--with-dom=/usr' '--with-dom-xslt=/usr'
'--with-dom-exslt=/usr' '--without-kerberos' '--with-pam'
'--disable-memory-limit' '--enable-ipv6' '--without-yaz'
'--disable-debug' '--with-curlwrappers' '--with-curl=/usr'
'--enable-dbx' '--with-zlib=/usr' '--with-zlib-dir=/usr'
'--with-sablot=/usr' '--enable-xslt' '--with-xslt-sablot'
'--with-xmlrpc' '--enable-wddx' '--with-xml'
'--enable-mbstring=all' '--enable-mbregex'
'--with-bz2=/usr' '--with-crack=/usr' '--with-cdb'
'--enable-pcntl' '--enable-bcmath' '--enable-calendar'
'--enable-dbase' '--enable-filepro' '--enable-ftp'
'--with-mime-magic=/usr/share/misc/file/magic.mime'
'--enable-sockets' '--enable-sysvsem' '--enable-sysvshm'
'--enable-sysvmsg' '--with-iconv' '--enable-shmop'
'--enable-dio' '--enable-yp' '--without-ncurses'
'--without-readline' '--enable-inline-optimization'
'--enable-track-vars' '--enable-trans-sid'
'--enable-versioning'
'--with-config-file-path=/etc/php/apache2-php4'
'--without-pear' '--libdir=/usr/lib/php'
'--with-pear=/usr/lib/php'
Reproduce code:
---------------
$fields = mysql_list_fields($link, $table) or
msg_error(mysql_error());
$len = mysql_field_len($fields, $i);
echo $len;
Expected result:
----------------
I expect to see the actual length as shown by issuing a
SHOW FIELDS FROM table query. For example if a field is
VARHCHAR(8) i expect to see 8, not 24.
Actual result:
--------------
24
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=33123&edit=1