Bug #47985 UTF-8 String Length Issue (guids etc)
| Submitted: | 12 Oct 2009 7:11 | Modified: | 5 Nov 2009 16:18 |
|---|---|---|---|
| Reporter: | Christos Pavlides | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | Connector / NET | Severity: | S3 (Non-critical) |
| Version: | OS: | Any | |
| Assigned to: | Reggie Burnett | CPU Architecture: | Any |
| Tags: | UTF-8 Guid Length | ||
[12 Oct 2009 7:11]
Christos Pavlides
[12 Oct 2009 9:23]
Tonci Grgin
Hi Christos and thanks for your report. Can you please attach a small, self-sufficient test case so I can check? I'm particularly interested in connection string used.
[12 Oct 2009 10:34]
Christos Pavlides
I don't have a test case, since I was in a hurry to make the necessary changes and deploy a new server... but the connection string is: "server=127.0.0.1;user id=user;persist security info=True;database=db;password=pass" I think your concern is if oldGuids is on or off. In order to reproduce this issue you have to set the oldguids to false (the default). I think a test case should be simple enough, create a table on 5.1.x server with datatype char of length 12 and set its char set to utf8. Then do a simple select on it using the connector. I tried the Execute reader and the fill dataset but I think any action should work. Please note that the previous comments are just assumption by looking at the code, since I only tested this using a View (instead of a table). Therefore this problem might be related only to views..
[12 Oct 2009 11:52]
Tonci Grgin
Ok, taken into account.
[12 Oct 2009 12:15]
Christos Pavlides
Thanks Tonci and sorry that I don't have the time to create a test case, or even do some manual tests. I will try to do it as soon as possible if required, but I think the particular problem should be easy to spot.
[12 Oct 2009 12:35]
Tonci Grgin
DDL and test-results
Attachment: Bug47985.txt (text/plain), 3.11 KiB.
[12 Oct 2009 12:38]
Tonci Grgin
Christos, using following test case:
MySqlConnection conn = new MySqlConnection();
conn.ConnectionString = "DataSource=**;Database=te**st;UserID=**;Password=**;PORT=**;logging=True;oldGuids = false;charset=utf8;";
conn.Open();
MySqlCommand cmd = conn.CreateCommand();
cmd.CommandTimeout = 50;
cmd.CommandText = "SELECT * FROM bug47985;";
try
{
MySqlDataReader dr = cmd.ExecuteReader();
Console.WriteLine("T DataTypeName(1): " + dr.GetDataTypeName(1));
Console.WriteLine("T GetFieldType(1): " + dr.GetFieldType(1));
dr.Close();
cmd.CommandText = "SELECT * FROM vbug47985;";
dr = cmd.ExecuteReader();
Console.WriteLine("V DataTypeName(1): " + dr.GetDataTypeName(1));
Console.WriteLine("V GetFieldType(1): " + dr.GetFieldType(1));
dr.Close();
cmd.Dispose();
conn.Close();
}
catch (Exception ex)
{
Console.Out.WriteLine(DateTime.UtcNow.ToLongTimeString() + " " + "Exception: " + ex.Message);
throw;
}
and DDL statements attached, I am unable to reproduce the problem...
T DataTypeName(1): VARCHAR
T GetFieldType(1): System.String
V DataTypeName(1): VARCHAR
V GetFieldType(1): System.String
Ideas?
[12 Oct 2009 12:41]
Tonci Grgin
Sorry, forgot to add most important parts of DDL: mysql> create table bug47985 (Id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, VCCol VARCHAR(12) CHARSET utf8 COLLATE utf8_bin) CHARSET utf8; Query OK, 0 rows affected (0.04 sec) mysql> create view vbug47985 as select * from bug47985; Query OK, 0 rows affected (0.01 sec)
[12 Oct 2009 12:45]
Christos Pavlides
Tonci the column must be Char not VarChar
[12 Oct 2009 12:47]
Tonci Grgin
Ok, retesting.
[12 Oct 2009 12:54]
Tonci Grgin
True, verified as described both for table and for view... oldGuids = false CHAR column of length 12, UTF8 T DataTypeName(1): CHAR(36) T GetFieldType(1): System.Guid V DataTypeName(1): CHAR(36) V GetFieldType(1): System.Guid New DDL: mysql> create table bug47985 (Id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, CCol CHAR(12) CHARSET utf8 COLLATE utf8_bin) CHARSET utf8; Query OK, 0 rows affected (0.03 sec) mysql> create view vbug47985 as select * from bug47985; Query OK, 0 rows affected (0.00 sec) mysql> select * from vbug47985; Field 1: `Id` Catalog: `def` Database: `test` Table: `vbug47985` Org_table: `vbug47985` Type: LONG Collation: binary (63) Length: 10 Max_length: 0 Decimals: 0 Flags: NOT_NULL PRI_KEY UNSIGNED AUTO_INCREMENT NUM PART_KEY Field 2: `CCol` Catalog: `def` Database: `test` Table: `vbug47985` Org_table: `vbug47985` Type: STRING Collation: utf8_general_ci (33) Length: 36 Max_length: 0 Decimals: 0 Flags: BINARY 0 rows in set (0.01 sec) mysql> select * from bug47985; Field 1: `Id` Catalog: `def` Database: `test` Table: `bug47985` Org_table: `bug47985` Type: LONG Collation: binary (63) Length: 10 Max_length: 0 Decimals: 0 Flags: NOT_NULL PRI_KEY UNSIGNED AUTO_INCREMENT NUM PART_KEY Field 2: `CCol` Catalog: `def` Database: `test` Table: `bug47985` Org_table: `bug47985` Type: STRING Collation: utf8_general_ci (33) Length: 36 Max_length: 0 Decimals: 0 Flags: BINARY
[12 Oct 2009 12:59]
Christos Pavlides
Thanks Tonci
[12 Oct 2009 13:07]
Christos Pavlides
This is my quick patch to solve the problem
Attachment: GuidIssue.patch (application/octet-stream, text), 1.71 KiB.
[23 Oct 2009 15:54]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/88012 781 Reggie Burnett 2009-10-23 - fixed guid type so that multi-byte character sets will not effect how it works. A column would be considered a guid if it has a *character* length of 36, not a *byte* length of 36 (bug #47985)
[23 Oct 2009 15:55]
Reggie Burnett
Fixed in 6.1.3+
[23 Oct 2009 19:03]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/88040 791 Reggie Burnett 2009-10-23 [merge] - fixed guid type so that multi-byte character sets will not effect how it works. A column would be considered a guid if it has a *character* length of 36, not a *byte* length of 36 (bug #47985)
[23 Oct 2009 19:04]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/88043 790 Reggie Burnett 2009-10-23 [merge] - fixed guid type so that multi-byte character sets will not effect how it works. A column would be considered a guid if it has a *character* length of 36, not a *byte* length of 36 (bug #47985)
[5 Nov 2009 16:18]
Tony Bedford
An entry has been added to the 6.1.3 changelog: For some character sets such as UTF-8, a CHAR column would sometimes be incorrectly interpreted as a GUID by MySQL Connector/NET. MySQL Connector/NET was changed so that a column would only be interpreted as a GUID if it had a character length of 36, as opposed to a byte length of 36.
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.083 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.