<!--- Verify first that your issue is not already reported on GitHub -->
<!--- Also test if the latest release and devel branch are affected too -->
<!--- Complete *all* sections as described, this form is processed automatically -->

##### SUMMARY
<!--- Explain the problem briefly below -->
The `mysql_user` module always reports the "changed" state on hosts with Python 3.7 set as the inrerpreter. The changed message points to https://github.com/ansible/ansible/commit/9c5275092f4759c87d4cd938a73368955934b9b9 commit as the possible culprit; the changed state shows up on Ansible 2.8.0+, but not on Ansible 2.7.0+. The actual functionality (creation of the MySQL user account, setting password, etc.) seems to work fine.

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
<!--- Write the short name of the module, plugin, task or feature below, use your best guess if unsure -->
mysql_user

##### ANSIBLE VERSION
<!--- Paste verbatim output from "ansible --version" between quotes -->
```paste below
ansible 2.8.3
  config file = None
  configured module search path = ['/home/drybjed/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/drybjed/.local/lib/python3.7/site-packages/ansible
  executable location = /home/drybjed/.local/bin/ansible
  python version = 3.7.3 (default, Apr  3 2019, 05:39:12) [GCC 8.3.0]
```

##### CONFIGURATION
<!--- Paste verbatim output from "ansible-config dump --only-changed" between quotes -->
```paste below
No changes
```

##### OS / ENVIRONMENT
<!--- Provide all relevant information below, e.g. target OS versions, network device firmware, etc. -->
The Ansible Controller is a Debian Buster (10) host, the working remote host is a Debian Stretch (9) host with Python 2.7 and 3.5 used as the interpreters (no changes). The faulty remote host is a Debian Buster (10) host with Python 3.7 as the interpreter.

##### STEPS TO REPRODUCE
<!--- Describe exactly how to reproduce the problem, using a minimal test-case -->

<!--- Paste example playbooks or commands between quotes below -->
```yaml
---

- hosts: all
  become: True
  tasks:

    - name: Manage MySQL account
      mysql_user:
        name: 'test-user'
        host: 'localhost'
        password: 'test-password'
        state: 'present'

    - name: Manage MySQL account
      mysql_user:
        name: 'test-user'
        host: 'localhost'
        password: 'test-password'
        state: 'present'
      register: output

    - debug: var=output
```

<!--- HINT: You can paste gist.github.com links for larger files -->

##### EXPECTED RESULTS
<!--- Describe what you expected to happen when running the steps above -->
```
PLAY [all] ******************************************************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************************************************
ok: [remote]

TASK [Manage MySQL account] *************************************************************************************************************************
ok: [remote]

TASK [Manage MySQL account] *************************************************************************************************************************
ok: [remote]

TASK [debug] ****************************************************************************************************************************************
ok: [remote] => {
    "output": {
        "changed": false,
        "failed": false,
        "msg": "User unchanged",
        "user": "test-user"
    }
}
```

##### ACTUAL RESULTS
<!--- Describe what actually happened. If possible run with extra verbosity (-vvvv) -->

<!--- Paste verbatim command output between quotes -->
```paste below
PLAY [all] ******************************************************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************************************************
ok: [remote]

TASK [Manage MySQL account] *************************************************************************************************************************
changed: [remote]

TASK [Manage MySQL account] *************************************************************************************************************************
changed: [remote]

TASK [debug] ****************************************************************************************************************************************
ok: [remote] => {
    "output": {
        "changed": true,
        "failed": false,
        "msg": "Password updated (new style)",
        "user": "test-user"
    }
}
```

""" MySQL doesn't have a better method of getting privileges aside from the
    SHOW GRANTS query syntax, which requires us to then parse the returned string.
    Here's an example of the string that is returned from MySQL:
     GRANT USAGE ON *.* TO 'user'@'localhost' IDENTIFIED BY 'pass';
    This function makes the query and returns a dictionary containing the results.
    The dictionary format is the same as that returned by privileges_unpack() below.
    """
    output = {}
    cursor.execute("SHOW GRANTS FOR %s@%s", (user, host))
    grants = cursor.fetchall()
    def pick(x):
        if x == 'ALL PRIVILEGES':
            return 'ALL'
        else:
            return x
    for grant in grants:
        res = re.match("""GRANT (.+) ON (.+) TO (['`"]).*\\3@(['`"]).*\\4( IDENTIFIED BY PASSWORD (['`"]).+\\6)? ?(.*)""", grant[0])
        if res is None:
            raise InvalidPrivsError('unable to parse the MySQL grant string: %s' % grant[0])
        privileges = res.group(1).split(", ")
        privileges = [pick(x) for x in privileges]
        if "WITH GRANT OPTION" in res.group(7):
            privileges.append('GRANT')
        if "REQUIRE SSL" in res.group(7):
            privileges.append('REQUIRESSL')
        db = res.group(2)
        output[db] = privileges
    return output
def privileges_unpack(priv, mode):