Giter VIP home page Giter VIP logo

Comments (3)

jeffreyhorner avatar jeffreyhorner commented on August 31, 2024

What you are experiencing has to do with the not so subtle differences between dbSendQuery and dbGetQuery:

dbSendQuery executes the query argument and then returns a MySQLResult object and expects the user to act on that object, by calling fetch() optionally, and finally dbClearResult().

dbGetQuery executes the query argument and immediately returns the query result, implicitly doing the fetch() and dbClearResult() for you.

The subtle difference is that if dbGetQuery sees that you have pending MySQLResults* on the connection argument, then it will implicitly create a new connection for you, execute the query, gather the results, close the new connection, and then return you the results.

In your example you are calling dbSendQuery without ever clearing out the results on the connection. So subsequent calls to dbGetQuery always act on transient connections that you never see.

Here's an example of solely using dbGetQuery to change the character set to utf8:

First make sure there's no pending results

> dbListResults(con)
list()
> dbGetQuery(con,"show variables like 'character_set_%'")
             Variable_name                      Value
1     character_set_client                     latin1
2 character_set_connection                     latin1
3   character_set_database                     latin1
4 character_set_filesystem                     binary
5    character_set_results                     latin1
6     character_set_server                     latin1
7     character_set_system                       utf8
8       character_sets_dir /usr/share/mysql/charsets/
> dbGetQuery(con,"set names utf8")
NULL
> dbGetQuery(con,"show variables like 'character_set_%'")
             Variable_name                      Value
1     character_set_client                       utf8
2 character_set_connection                       utf8
3   character_set_database                     latin1
4 character_set_filesystem                     binary
5    character_set_results                       utf8
6     character_set_server                     latin1
7     character_set_system                       utf8
8       character_sets_dir /usr/share/mysql/charsets/

Now let's reproduce your error by using dbSendQuery

> dbListResults(con)
list()
> dbGetQuery(con,"show variables like 'character_set_%'")
             Variable_name                      Value
1     character_set_client                     latin1
2 character_set_connection                     latin1
3   character_set_database                     latin1
4 character_set_filesystem                     binary
5    character_set_results                     latin1
6     character_set_server                     latin1
7     character_set_system                       utf8
8       character_sets_dir /usr/share/mysql/charsets/
> dbSendQuery(con,"set names utf8")
<MySQLResult:(16695,0,20)> 
> dbGetQuery(con,"show variables like 'character_set_%'")
             Variable_name                      Value
1     character_set_client                     latin1
2 character_set_connection                     latin1
3   character_set_database                     latin1
4 character_set_filesystem                     binary
5    character_set_results                     latin1
6     character_set_server                     latin1
7     character_set_system                       utf8
8       character_sets_dir /usr/share/mysql/charsets/

So we've reproduced the behavior you're seeing. What's happened is that dbGetQuery saw that you had pending results and created a new connection, executed your query for getting the character set variables in a new connection, and showed you the results.

Your original connection actually has executed your query for setting the character set to utf8, but you just have to clear out the results object first like so:

> dbListResults(con)
[[1]]
<MySQLResult:(16695,0,20)> 

> dbClearResult(dbListResults(con)[[1]])
[1] TRUE
> dbGetQuery(con,"show variables like 'character_set_%'")
             Variable_name                      Value
1     character_set_client                       utf8
2 character_set_connection                       utf8
3   character_set_database                     latin1
4 character_set_filesystem                     binary
5    character_set_results                       utf8
6     character_set_server                     latin1
7     character_set_system                       utf8
8       character_sets_dir /usr/share/mysql/charsets/

from rmysql.

bencomp avatar bencomp commented on August 31, 2024

Thanks for answering. I'll remember :)

from rmysql.

rishabasthana5144 avatar rishabasthana5144 commented on August 31, 2024

Hi i need assistance regarding the same issue of encoding. Looking for help!!

from rmysql.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.