前提・実現したいこと
CentOS7.5.1804のサーバーがあり、rh-mariadb102-mariadb-server-utils-10.2.8-5.el7.x86_64が走っているデータベースサーバーが構築済です。
このmariadbに、Excel VBAからSQLを送信するプログラムを走らせたところ、実行時エラー2147467259 が発生しました。
該当のソースコード
VBA
1Sub test01() 2 3 Dim wkb01 As Workbook 4 Dim wsh01 As Worksheet 5 Dim Ran01 As Range 6 7 Dim c1 As Integer 8 Dim r1 As Integer 9 10 Dim tmptbn1 As String 11 Dim sql1 As String 12 13 Dim myCmd As New ADODB.Command 14 Dim myConn As New ADODB.Connection 15 Dim connectionString As String 16 17 connectionString = "Driver={MySQL ODBC 3.51 DRIVER};" _ 18 & " SERVER=[サーバー名];" _ 19 & " STMT=SET NAMES sjis;" _ 20 & " PORT=3306;" _ 21 & " DATABASE=[データベース];" _ 22 & " USER=[ユーザー];" _ 23 & " PASSWORD=[パスワード];" _ 24 & " OPTION=2;" 25 myConn.Open connectionString 26 27 With myCmd 28 .ActiveConnection = myConn 29 30 tmptbn1 = "tb_" & dt2unepocht(Now()) 31 32 sql1 = "CREATE TABLE " 33 sql1 = sql1 & tmptbn1 34 sql1 = sql1 & " (" 35 sql1 = sql1 & " `serial` INTEGER UNSIGNED auto_increment primary key" 36 sql1 = sql1 & ",`name` varchar(128)" 37 sql1 = sql1 & ");" 38 39 .CommandText = sql1 40 .Execute 41 42 43 Set wkb01 = ThisWorkbook 44 Set wsh01 = wkb01.Worksheets(1) 45 wsh01.Activate 46 47 r1 = 2 48 c1 = 1 49 50 Do 51 Set Ran01 = wsh01.Cells(r1, c1) 52 53 If Ran01 = "" Then 54 Exit Do 55 End If 56 57 r1 = r1 + 1 58 59 sql1 = "INSERT INTO `" 60 sql1 = sql1 & tmptbn1 61 sql1 = sql1 & "` (`name`) VALUE ('" 62 sql1 = sql1 & Ran01.Value 63 sql1 = sql1 & "');" 64 65 .CommandText = sql1 66 .Execute 67 68 Loop 69 70 71 End With 72 myConn.Close: Set myConn = Nothing 73End Sub
内容
データベースにtb_[エポック秒]のテーブルを新作し、自身のシート1のA2から順に下がって、セルの値をそのテーブルにinsertしていくプログラムです。
㈱式会社
㎝センチ
Ⅱローマ2
①まる1
を値として入れました。
以前、同様の内容をMySQL5.6で実施していたときは、このような問題は無かったはずなのですが、サーバーの交換でmariadbになってから、一部データがエラーになるようになり、調べたところ特殊文字を含んでいる行では? と当たりをつけ、テストを走らせてみたところ、案の定でした。
特殊文字を含んでいても、そのまま通過するようにしたいのですが、mariadb 特殊文字 で検索してみても、これといってヒントになる情報が得られなかったので
ご質問とさせていただきます。
補足情報
MariaDB側の文字コード設定は、UTFになっているのは確認しました。
MariaDB [(none)]> show variables like 'char%';
+--------------------------+--------------------------------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------------------------------+
| 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 | /opt/rh/rh-mariadb102/root/usr/share/mariadb/charsets/ |
+--------------------------+--------------------------------------------------------+
回答4件
あなたの回答
tips
プレビュー