Pike v8.0 release 1738

Method Sql.mysql()->set_charset()


Method set_charset

void set_charset(string charset)

Description

Changes the connection charset. Works similar to sending the query SET NAMES charset but also records the charset on the client side so that various client functions work correctly.

charset is a MySQL charset name or the special value "unicode" (see below). You can use SHOW CHARACTER  SET to get a list of valid charsets.

Specifying "unicode" as charset is the same as "utf8" except that unicode encode and decode modes are enabled too. Briefly, this means that you can send queries as unencoded unicode strings and will get back non-binary text results as unencoded unicode strings. See set_unicode_encode_mode and set_unicode_decode_mode for further details.

Throws

Throws an exception if the server doesn't support this, i.e. if the statement SET NAMES fails. Support for it was added in MySQL 4.1.0.

Note

If charset is "latin1" and unicode encode mode is enabled (the default) then big_query can send wide unicode queries transparently if the server supports UTF-8. See set_unicode_encode_mode.

Note

If unicode decode mode is already enabled (see set_unicode_decode_mode) then this function won't affect the result charset (i.e. the MySQL system variable character_set_results).

Actually, a query SET character_set_results = utf8 will be sent immediately after setting the charset as above if unicode decode mode is enabled and charset isn't "utf8".

Note

You should always use either this function or the "mysql_charset_name" option to create to set the connection charset, or more specifically the charset that the server expects queries to have (i.e. the MySQL system variable character_set_client). Otherwise big_query might not work correctly.

Afterwards you may change the system variable character_set_connection, and also character_set_results if unicode decode mode isn't enabled.

Note

The MySQL latin1 charset is close to Windows cp1252. The difference from ISO-8859-1 is a bunch of printable chars in the range 0x80..0x9f (which contains control chars in ISO-8859-1). For instance, the euro currency sign is 0x80.

You can use the mysql-latin1 encoding in the Charset module to do conversions, or just use the special "unicode" charset instead.

See also

get_charset, set_unicode_encode_mode, set_unicode_decode_mode