@@ -416,7 +416,7 @@ func (mc *mysqlConn) readColumns(count int) (columns []mysqlField, err error) {
416
416
pos += n
417
417
418
418
// Name [len coded string]
419
- name , n , err = readLengthEnodedString (data [pos :])
419
+ name , _ , n , err = readLengthEnodedString (data [pos :])
420
420
if err != nil {
421
421
return
422
422
}
@@ -471,14 +471,19 @@ func (rows *mysqlRows) readRow(dest []driver.Value) (err error) {
471
471
472
472
// RowSet Packet
473
473
var n int
474
+ var isNull bool
474
475
pos := 0
475
476
476
477
for i := range dest {
477
478
// Read bytes and convert to string
478
- dest [i ], n , err = readLengthEnodedString (data [pos :])
479
+ dest [i ], isNull , n , err = readLengthEnodedString (data [pos :])
479
480
pos += n
480
481
if err == nil {
481
- continue
482
+ if ! isNull {
483
+ continue
484
+ } else {
485
+ dest [i ] = nil
486
+ }
482
487
}
483
488
return // err
484
489
}
@@ -700,6 +705,7 @@ func (rc *mysqlRows) readBinaryRow(dest []driver.Value) (err error) {
700
705
// values [rest]
701
706
var n int
702
707
var unsigned bool
708
+
703
709
for i := range dest {
704
710
// Field is NULL
705
711
// (byte >> bit-pos) % 2 == 1
@@ -774,10 +780,15 @@ func (rc *mysqlRows) readBinaryRow(dest []driver.Value) (err error) {
774
780
FIELD_TYPE_TINY_BLOB , FIELD_TYPE_MEDIUM_BLOB , FIELD_TYPE_LONG_BLOB ,
775
781
FIELD_TYPE_BLOB , FIELD_TYPE_VAR_STRING , FIELD_TYPE_STRING ,
776
782
FIELD_TYPE_GEOMETRY :
777
- dest [i ], n , err = readLengthEnodedString (data [pos :])
783
+ var isNull bool
784
+ dest [i ], isNull , n , err = readLengthEnodedString (data [pos :])
778
785
pos += n
779
786
if err == nil {
780
- continue
787
+ if ! isNull {
788
+ continue
789
+ } else {
790
+ dest [i ] = nil
791
+ }
781
792
}
782
793
return // err
783
794
0 commit comments